[アップデート] CloudTrailでVPC Endpointのネットワークアクティビティのログ記録がサポートされました
あしざわです。
米国時間2024/9/25に、AWS CloudTrailでVPC Endpointのネットワークアクティビティを記録できるようになったというアップデートが発表されました(Preview)
アップデート概要
新機能について
CloudTrailは、AWSのAPI実行履歴を記録するサービスです。
これまでのCloudTrailでは、3つのイベントの記録が可能でした。
- 管理イベント (Management Events): AWS内のリソースに対して実行される管理操作に関するイベントを記録する(例:EC2インスタンスを作成する、IAMユーザーを作成する)
- データイベント (Data Events): AWSリソース上やリソース内で実行されたリソース操作に関するイベントを記録する(例:S3オブジェクトをGetする、Lambda関数を実行する)
- インサイトイベント (Insights Events): CloudTrail管理イベントを分析し、通常時の傾向と比較したAPI呼び出し率の異常やエラー率の異常を取得する(例:S3のDeleteBucket APIが1分間に100回実行された)
本アップデートによって、ここに ネットワークアクティビティイベント(Network Activity Events) が追加されました。
ネットワークアクティビティイベントを利用すると、VPC内からVPC Endpoint経由でAWSサービスへ実行されたAWSのAPI実行履歴を記録できるようになります。
プレビュー版でサポートされているAWSサービスはこちら。
- AWS CloudTrail
- Amazon EC2
- AWS Key Management Service (KMS)
- AWS Secrets Manager
一部のサービスのみの対応になるので全てのサービスで記録されるわけではないという点は覚えておきましょう。
その他機能の詳細は以下AWS公式ドキュメントをご覧ください。
料金
ネットワークアクティビティイベントのログ記録を有効化すると、追加料金が発生します。
イベントを記録した時に発生する料金はこちら (データストアごと)
- CloudTrail証跡
- S3に配信されるネットワークアクティビティイベント 100,000 件あたり
0.10
USD
- S3に配信されるネットワークアクティビティイベント 100,000 件あたり
- CloudTrail Lake イベントデータストア
0.75
USD/GB (1年間延長可能な保持価格)
※証跡はデータイベントと同じ料金形態で発生する料金と同じ、イベントデータストアもその他のCloudTrailイベントと同様の料金でした。
参考:AWS CloudTrail pricing
※2024/9/28現在日本語のページには記載がないため、記載がなかった場合は英語ページを確認してください。
対応リージョン
利用可能な商用リージョンすべてで利用可能です。つまり、東京リージョンや大阪リージョンでも利用可能です。
注意点
本機能はプレビュー版でリリースされているため、一般提供開始までに仕様変更される可能性があります。
そのため、本番環境での利用開始の前にテスト環境などで動作確認を行うことをおすすめします。また、プレビュー版の機能に関するサポートは限定的である可能性にも留意ください。
有効化してみた
ここからは、CloudTrailのネットワークアクティビティイベントの記録を有効化する手順をご紹介します。
CloudTrailのイベント記録は現状2つのリソースで開始できますが、ネットワークアクティビティイベントは両方に対応しています。
- CloudTrail証跡
- CloudTrail Lakeイベントデータストア
記録の有効化は、新規のリソースだけでなく既存リソースの変更にも対応していました。
ということで、今回は新規/既存のCloudTrail証跡でネットワークアクティビティイベントの記録を有効化してみます。
新規のCloudTrail証跡からネットワークアクティビティイベントの記録を有効化する
CloudTrailのマネジメントコンソールから新規の証跡を作成し、ログイベントの選択のところで、VPCE イベント - Preview
のみをチェックボックスで選択します。
このアカウントには他に管理イベントを記録する既存の証跡が存在するため、管理イベントを記録する2つ目以降の証跡によるコスト増を避ける目的でデフォルトの管理イベント記録をOFFにしています。
続いて、VPCEイベントの設定をします。
VPCEイベントソースで以下の中から取得するイベントソースを選択します。
- cloudtrail.amazonaws.com
- ec2.amazonaws.com
- kms.amazonaws.com
- secretsmanager.amazonaws.com
今回は ec2.amazonaws.com を選びました。
Loga selector templateで以下の中から記録範囲を選択します。
- すべてのイベントをログに記録する
- Log network activity access denied events (アクセス拒否されたイベントのみ)
- カスタム (高度なイベントセレクターで指定)
今回は Log network activity access denied events を選択しました。
VPCEイベントソースは1つしか選択できません。複数のイベントソースを選択したいときは VPCEイベントタイプを追加
をクリックすると、VPCEイベントを設定する枠が追加されるので、こちらから設定してください。
そのまま作成し、VPCEイベントが記録された証跡が作成されたことが確認できました。
既存のCloudTrail証跡を変更してネットワークアクティビティイベントの記録を有効化する
既存証跡のパターンでも手順は新規作成とほぼ同じなのですが、少しハマった点があったのでその内容を共有します。
結論から言うと、既存の証跡でネットワークアクティビティイベントの記録を有効化するためには、証跡のイベントセレクター設定を事前に 高度なイベントセレクター() に変更しておく必要があります。
イベントセレクター設定のデフォルト値は 基本のイベントセレクター です。明示的に設定していない場合は別途AWS CLIから直接変更したり、マネジメントコンソールからデータイベントの記録を高度なイベントセレクターの設定とともに有効化しておく必要があります。
ハマった事象
管理イベントの記録のみが有効化された既存証跡を対象に、ネットワークアクティビティイベントの記録を有効化します。
ところが、以下のような警告文が表示され、編集ボタンが無効化されてしまっていました。
You’re currently using basic event selectors to log data events. To log network activity events, you must switch to advanced event selectors.
対策
先述した警告文から察すると、高度なイベントセレクターにスイッチするためにデータイベントのログを取得する必要があるようです。
データソース:DynamoDB、高度なセレクターを利用して、データイベントの記録を有効化してみました。
すると、編集ボタンが有効化されて押下できるようになりました。
原因究明
ただ、ネットワークアクティビティの記録の前提としてデータイベントの記録が必要な理由が想像できなかったため、コンソール上から判別できないCloudTrailの内部的な設定を確認してみたくなりました。
イベントセレクターの情報を取得・変更するようなAPIがないかAWS CLIのドキュメントから調べてみると、すぐに見つかりました。
- get-event-selectors — AWS CLI 1.34.29 Command Reference
- put-event-selectors — AWS CLI 1.34.29 Command Reference
ドキュメントの記載からイベントセレクターの設定はデータイベントの取得の有無に関係なく、証跡単位で保持されていることがわかりました。デフォルトはEventSelectors
で、高度なイベントセレクターに切り替えると AdvancedEventSelectors
になります。イベントセレクターの設定を行うと自動で上書きされてどちらか片方だけの設定が保持されるようです。
今回の事象の根本原因となるCLIのドキュメント上の記載がこちら、ネットワークアクティビティイベントの記録にEventSelectors
が使えないと記載されていますね。
You can't use EventSelectors to log network activity events.
マネジメントコンソール上でネットワークアクティビティイベントの設定が可能になっている(設定の編集ボタンが有効化されて押下できる)状態で、get-event-selectors
コマンドから現在の証跡の状態を確認してみました。
$ aws cloudtrail get-event-selectors --trail-name management-trail
{
"TrailARN": "arn:aws:cloudtrail:ap-northeast-1:123456789012:trail/management-trail",
"AdvancedEventSelectors": [
{
"Name": "管理イベントセレクター",
"FieldSelectors": [
{
"Field": "eventCategory",
"Equals": [
"Management"
]
}
]
}
]
}
出力されたJSONの2番目のKeyがAdvancedEventSelectors
になっていますね。おそらくこのKeyは元々EventSelectors
だったが、データイベントの設定によってAdvancedEventSelectors
のKeyの設定によって上書きされたのでしょう。
真相を探るために、AWS CLIからEventSelectors
のKeyに切り戻してみます。
$ aws cloudtrail put-event-selectors --trail-name management-trail --event-selectors '[{"ReadWriteType": "All","IncludeManagementEvents": true}]'
{
"TrailARN": "arn:aws:cloudtrail:ap-northeast-1:123456789012:trail/management-trail",
"EventSelectors": [
{
"ReadWriteType": "All",
"IncludeManagementEvents": true,
"DataResources": [],
"ExcludeManagementEventSources": []
}
]
}
再度マネジメントコンソールからVPCEイベントの設定箇所を見てみると、元の状態に切り戻っていました。想定通りですね。
最後に
今回は、アップデートでプレビュー可能になった AWS CloudTrailのVPC Endpointのネットワークアクティビティ記録の機能を紹介し、記録を有効化するところまで検証しました。
実施した検証は記録設定の有効化までしかできていないので、別途ネットワークアクティビティの記録をキャプチャする検証もやってみたいです。
冒頭で述べた通り、今回のアップデートではプレビュー版でのリリースであるため、本番適用時の注意や一般提供開始時の仕様変更に気をつけましょう。
以上です。